package abel.wlmr.model.type;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * m
 * 冻结间隔时间
 * （min）
 * 每整点依次的冻结时刻
 * （冻结数据排列次序同冻结时刻次序）
 * 0 不冻结 无
 * 1 15 15 分、 30 分、 45 分、 0 分
 * 2 30 30 分、 0 分；
 * 3 60 0 分
 * 10 120 0 点、 2 点、 4 点、 6 点、 8 点、 10 点、 12 点、 14 点、 16 点、 18 点、
 * 20 点、 22 点
 * 11 180 0 点、 3 点、 6 点、 9 点、 12 点、 15 点、 18 点 21 点
 * 12 240 0 点、 4 点、 8 点、 12 点、 16 点、 20 点
 * 13 360 0 点、 6 点、 12 点、 18 点
 * 14 720 0 点、 12 点
 * 254 5 5 分、 10 分、 15 分......、 0 分
 * 255 1 1 分、 2 分、 3 分、 ......0 分
 * 
 * @author Abel
 *
 */
public enum FrozeDensityType {
    M0(0, 0),
    M15(1, 15),
    M30(2, 30),
    M60(3, 60),
    M120(10, 120),
    M180(11, 180),
    M240(12, 240),
    M360(13, 360),
    M720(14, 720),
    M5(254, 5),
    M1(255, 1);

    private short value;
    private short period;

    private static final Map<Short, FrozeDensityType> map;

    static {
        HashMap<Short, FrozeDensityType> map1 = new HashMap<>();
        for (FrozeDensityType fd : FrozeDensityType.values()) {
            map1.put(fd.value, fd);
        }

        map = Collections.unmodifiableMap(map1);
    }

    private FrozeDensityType(int v, int p) {
        this.value = (short) v;
        this.period = (short) p;
    }

    public static FrozeDensityType findEnumByValue(int v) {
        short key = (short) v;
        if (map.containsKey(key)) {
            return map.get(key);
        }

        return M0;
    }

    /* (non-Javadoc)
     * @see java.lang.Enum#toString()
     */
    @Override
    public String toString() {
        return String.format("FrozeDensity[value=%s, period=%s (minutes)]", value, period);
    }

    /**
     * @return the value
     */
    public short getValue() {
        return value;
    }

    /**
     * @param value
     *            the value to set
     */
    public void setValue(short value) {
        this.value = value;
    }

    /**
     * The period between points in minutes.
     * 
     * @return the period
     */
    public short getPeriod() {
        return period;
    }

    /**
     * @param period
     *            the period to set
     */
    public void setPeriod(short period) {
        this.period = period;
    }
}
